/*
列表状态生成器，根据传入设置定制store
*/
import $ from '@/common'
import Status from './status'
import Header from './header'
import Edit from './edit'
import Formula from './formula'
import Command from './command'
import Page from './page'
import Data from './data'
var mixins = {
  Status, // 点选相关
  Header, // 表头控制
  Edit, // 数据编辑逻辑
  Formula, // 行内计算
  Command, // 行内命令
  Page, // 分页
  Data // 数据分页与查询
}
mixins
var store = {
  state: {
    data: [],
    model: [],
    // 字段额外设置,key为字段编码，扩展指定字段
    fieldExt: {},
    // 行状态，可根据需要扩展状态选项
    rows: [
      /*{
                 check:false //选中状态
      }*/
    ],
  },
  getters: {
    fields(state) {
      return state.model.fields || []
    },
    // 返回列表状态下显示的字段
    listFields(state, getters) {
      return getters.fields.filter(field => {
        // 显示listpos大于0的字段，不显示主键
        return field.type !== 'pk' && (field.listpos === undefined ? true : field.listpos > 0)
      }).sort((a, b) => {
        // 根据listpos排序
        return a.listpos - b.listpos
      })
    }
  },
  actions: {},
  mutations: {
    //重设数据行，会同时清空行状态
    setData(state, data) {
      $.set(state, 'data', data)
      $.set(state, 'rows', [])
    },
    //追加数据行
    appendDate(state, data) {
      state.data.push(...data)
    },
    setModel(state, model) {
      $.set(state, 'model', model)
    }
  }
}

export default function createStore(setting) {
  // 需要克隆state，防止互相污染？
  var newStore = { ...store
  }
  for (let i in mixins) {
    newStore = $.merge(newStore, mixins[i])
  }
  return newStore
}
